import chalk from 'chalk';
import shell from 'shelljs'
import logSymbols from './logSymbols.js';
import fs from 'fs-extra';
import { deleteFolder,inquirerInputs,modifyPackageJson,npmInstall }  from './utils.js'
import inquirer from 'inquirer';
import  clone  from "./gitClone.js"
import { messages } from './templates.js'
import templates from './templates.js';


const initAction = async (name,option) => {
  console.log('initaction')
    if(!shell.which('git')){
        shell.echo('Sorry, this script requires git');
        console.log(chalk.redBright('Sorry, this script requires git'))
        shell.exit(1);
    }
    // 验证name输入是否符合规范
    if (name.match(/[\u4E00-\u9FFF`~!@#$%&^*[\]()\\;:<.>/?]/g)) {
      console.log(logSymbols.error, "项目名称存在非法字符！");
      return;
    }

    // 验证是否存在${name}同名文件夹，如果存在
    //1. 如果没有 -f -force选项，提示用户是否删除同名文件夹
    //2. 如果存在 -f -force选项，删除同名文件夹
    if(fs.existsSync(name) && !option.force){
        console.log(logSymbols.error, "项目名称已存在！",chalk.yellowBright(name));
       //询问是否删除文件夹
       let answer = await inquirer.prompt([
           {
               type: 'confirm',
               name: 'delete',
               message: '项目名称已存在，是否删除？'
          }
       ])
       console.log(answer)
       if(answer.delete){
        await deleteFolder(name)
       }
    }else if(fs.existsSync(name) && option.force){
      console.log(logSymbols.warning, "项目名称已存在！",chalk.yellowBright(name));

      await deleteFolder(name)

    }
    //判断命令行是否输入啦-i --ignore 选项 快速创建项目选项
    let answers;
    if(option.ignore){
      console.log(logSymbols.success, "正在快速创建项目...");
      //快速创建项目
      //1. 复制项目模板到目标文件夹
      //2. 安装依赖
      //3. 启动项目
    }else{
      // console.log(logSymbols.success, "正在创建项目...");
       answers = await inquirerInputs(messages);
      console.log(answers);
     
      // // 请输入项目的描述inquirer
      // const description = await inquirer.prompt([
      //     {
      //       type: 'input',
      //       name: 'description',
      //       message: '请输入项目的描述',
      //       validate(value){
      //         if(value.length === 0){
      //           return '项目描述不能为空！'
      //         }
      //         return true
      //       }
      //     }
      // ])
      // // 请输入项目的作者
      // const author = await inquirer.prompt([
      //     {
      //       type: 'input',
      //       name: 'author',
      //       message: '请输入项目的作者',
      //       validate(value){
      //         if(value.length === 0){
      //           return '项目作者不能为空！'
      //         }
      //         return true
      //       }
      //     }

      // ])
      // // 请输入项目的版本号
      //   const version = await inquirer.prompt([
      //     {
      //       type: 'input',
      //       name: 'version',
      //       message: '请输入项目的版本号',
      //       validate(value){
      //         if(value.length === 0){
      //           return '项目版本号不能为空！'
      //         }
      //         return true
      //       }
      //     }
      //   ])
      // // 请输入项目的git仓库地址
      //   const repository = await inquirer.prompt([
      //     {
      //       type: 'input',
      //       name: 'repository',
      //       message: '请输入项目的git仓库地址'
      //     }

      //   ])
    }
      // await clone('yingside/webpack-template', name)
      let repository = ''
      if(option.template){
        repository = option.template
      }else{
        // repository = 'yingside/webpack-template'
        // 选择模板

      const  template = await inquirer.prompt([
          {
            type: 'list',
            name: 'template',
            message: '请选择一个模板',
            choices: templates
          }
        ])
        repository = template.template
      }
      console.log(repository)
      await clone(repository, name)
      await modifyPackageJson(name,answers)
      await npmInstall(name)
    
    console.log(option)
    console.log(name)
}

export default initAction